using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Warudo.Core;
using Warudo.Core.Data;
using Warudo.Core.Localization;
using Warudo.Core.Resource;
using Warudo.Core.Utils;
using Warudo.Plugins.Core.Utils;
using System;
using Object = UnityEngine.Object;

namespace Warudo.Plugins.Core
{
    public partial class CorePlugin
    {
        public class BuiltInCharacterAnimationResourceProvider : IResourceProvider
        {
            public string ResourceProviderName => throw new NotImplementedException();
            internal BuiltInCharacterAnimationResourceProvider(AutoCompleteList catalog)
            {
                throw new NotImplementedException();
            }

            public List<Resource> ProvideResources(string query)
            {
                throw new NotImplementedException();
            }
        }

        public class BuiltInCharacterHandPoseResourceProvider : IResourceProvider
        {
            public string ResourceProviderName => throw new NotImplementedException();
            public List<Resource> ProvideResources(string query)
            {
                throw new NotImplementedException();
            }
        }

        public class BuiltInLUTResourceProvider : IResourceProvider
        {
            public string ResourceProviderName => throw new NotImplementedException();
            internal BuiltInLUTResourceProvider(AutoCompleteList catalog)
            {
                throw new NotImplementedException();
            }

            public List<Resource> ProvideResources(string query)
            {
                throw new NotImplementedException();
            }
        }

        public class BuiltInLensDirtResourceProvider : IResourceProvider
        {
            public string ResourceProviderName => throw new NotImplementedException();
            internal BuiltInLensDirtResourceProvider(AutoCompleteList catalog)
            {
                throw new NotImplementedException();
            }

            public List<Resource> ProvideResources(string query)
            {
                throw new NotImplementedException();
            }
        }

        public class BuiltInPropResourceProvider : IResourceProvider
        {
            public string ResourceProviderName => throw new NotImplementedException();
            internal BuiltInPropResourceProvider(AutoCompleteList catalog)
            {
                throw new NotImplementedException();
            }

            public List<Resource> ProvideResources(string query)
            {
                throw new NotImplementedException();
            }
        }

        public class BuiltInParticleResourceProvider : IResourceProvider
        {
            public string ResourceProviderName => throw new NotImplementedException();
            internal BuiltInParticleResourceProvider(AutoCompleteList catalog)
            {
                throw new NotImplementedException();
            }

            public List<Resource> ProvideResources(string query)
            {
                throw new NotImplementedException();
            }
        }

        public class BuiltInSoundResourceProvider : IResourceProvider
        {
            public string ResourceProviderName => throw new NotImplementedException();
            internal BuiltInSoundResourceProvider(AutoCompleteList catalog)
            {
                throw new NotImplementedException();
            }

            public List<Resource> ProvideResources(string query)
            {
                throw new NotImplementedException();
            }
        }

        public class PersistentDataDirectoryCharacterAnimationResourceProvider : IResourceProvider
        {
            public string ResourceProviderName => throw new NotImplementedException();
            public List<Resource> ProvideResources(string query)
            {
                throw new NotImplementedException();
            }
        }

        public class PersistentDataDirectoryEnvironmentResourceProvider : IResourceProvider
        {
            public string ResourceProviderName => throw new NotImplementedException();
            public List<Resource> ProvideResources(string query)
            {
                throw new NotImplementedException();
            }
        }

        public class PersistentDataDirectoryCharacterResourceProvider : IResourceProvider
        {
            public string ResourceProviderName => throw new NotImplementedException();
            public List<Resource> ProvideResources(string query)
            {
                throw new NotImplementedException();
            }
        }

        public class PersistentDataDirectoryPropResourceProvider : IResourceProvider
        {
            public string ResourceProviderName => throw new NotImplementedException();
            public List<Resource> ProvideResources(string query)
            {
                throw new NotImplementedException();
            }
        }

        public class PersistentDataDirectoryParticleResourceProvider : IResourceProvider
        {
            public string ResourceProviderName => throw new NotImplementedException();
            public List<Resource> ProvideResources(string query)
            {
                throw new NotImplementedException();
            }
        }

        public class PersistentDataDirectoryImageResourceProvider : IResourceProvider
        {
            public string ResourceProviderName => throw new NotImplementedException();
            public List<Resource> ProvideResources(string query)
            {
                throw new NotImplementedException();
            }
        }

        public class PersistentDataDirectorySoundResourceProvider : IResourceProvider
        {
            public string ResourceProviderName => throw new NotImplementedException();
            public List<Resource> ProvideResources(string query)
            {
                throw new NotImplementedException();
            }
        }

        public class PersistentDataDirectoryVideoResourceProvider : IResourceProvider
        {
            public string ResourceProviderName => throw new NotImplementedException();
            public List<Resource> ProvideResources(string query)
            {
                throw new NotImplementedException();
            }
        }
    }

    public static class ResourceListExtensions
    {
        public static List<Resource> UseFilenameForDuplicates(this List<Resource> localResources)
        {
            throw new NotImplementedException();
        }
    }
}